//------------------------------------------------------------------------------
// Fichiers d'ent�te utilis�s
//------------------------------------------------------------------------------
#include "RGBImage.hpp"
#include "GrayImage.hpp"
#include "qimage.h"
#include "OtherImageLoader.hpp"


//------------------------------------------------------------------------------
// Définition de constantes
//------------------------------------------------------------------------------

namespace ImageAnalysis
{

	//----------------------------------------------------------------------
	// Constructeur
	//----------------------------------------------------------------------
	OtherImageLoader::OtherImageLoader()
	//ImageLoader()
	{

	}

	//----------------------------------------------------------------------
	// Destructeur
	//----------------------------------------------------------------------
	OtherImageLoader::~OtherImageLoader( )
	{

	}

	//----------------------------------------------------------------------
	//
	//----------------------------------------------------------------------
	//Image* OtherImageLoader::LoadImage( const char * filename )
	Image* OtherImageLoader::LoadImageFromFile( std::string& filename )
	{
        Image* loadedImage;
		QString imageFilename(filename.c_str());
		QImage image(filename.c_str(), 0);

		// Vérification que l'image a bien été chargée
		if( image.isNull() )
		{	return 0; }

		int imageHeight = image.height();
		int imageWidth  = image.width();

		// Vérification si l'image est en niveau de gris et en fonction,
		// création de l'image
		bool imageColor = !image.isGrayscale();
		if( imageColor )
		{	loadedImage = new RGBImage(imageWidth, imageHeight); }
		else
		{	loadedImage = new GrayImage(imageWidth, imageHeight); }

		// Lecture des données de l'image pour la construction des
		// pixels de l'image
		for( int j=0; j<imageHeight; j++)
		{
			for( int i=0; i<imageWidth; i++)
			{
				if(imageColor)
				{
					unsigned int pixel = image.pixel( i, imageHeight-1-j );
					loadedImage->SetPixel( i +j*imageWidth, (unsigned char*)&pixel );
				}
				else
				{
					unsigned int pixel = image.pixel( i, imageHeight-1-j );
					loadedImage->SetPixel( i +j*imageWidth, (unsigned char*)&pixel );
				}
			}
		}
		return loadedImage;
	}
}
